package com.sinothk.android.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.EditText;

import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * <pre>
 *  创建:  梁玉涛 2018/12/17 on 16:38
 *  项目:  WuMinAndroid
 *  描述:
 *  更新:
 * <pre>
 */
public class UnitUtil {

    private Context context;

    UnitUtil(Context mContext) {
        context = mContext;
    }

    //将px转换为dp
    public int px2dp(int pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    //将像素转换为px
    public int dip2px(int dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 格式化小数，精确到小数点后两位
     */
    /**
     * @param value
     * @param dataStyle "#0.00"
     * @return
     */
    public String formatData(double value, String dataStyle) {
        DecimalFormat df = new DecimalFormat(dataStyle);
        return df.format(value);
    }

    /**
     * 格式化小数，精确到小数点后两位
     */
    /**
     * 格式化小数距离的米数：33米、3千米
     *
     * @param value
     * @return
     */
    DecimalFormat df = null;

    public String formatDistance(double value) {
        if (value < 100) {
            return "100米内";
        } else if (value < 1000) {
            return (int) value + "米";
        } else {
            if (df == null) {
                df = new DecimalFormat("#0.0");
            }
            return df.format(value / 1000.0) + "公里";
        }
    }

    public String getFileSize(long size) {
        //获取到的size为：1705230
        int GB = 1024 * 1024 * 1024;//定义GB的计算常量
        int MB = 1024 * 1024;//定义MB的计算常量
        int KB = 1024;//定义KB的计算常量
        DecimalFormat df = new DecimalFormat("0.00");//格式化小数
        String resultSize = "";
        if (size / GB >= 1) {
            //如果当前Byte的值大于等于1GB
            resultSize = df.format(size / (float) GB) + "GB";
        } else if (size / MB >= 1) {
            //如果当前Byte的值大于等于1MB
            resultSize = df.format(size / (float) MB) + "MB";
        } else if (size / KB >= 1) {
            //如果当前Byte的值大于等于1KB
            resultSize = df.format(size / (float) KB) + "KB";
        } else {
            resultSize = size + "B";
        }
        return resultSize;
    }

    private static final DecimalFormat amountFormat = new DecimalFormat("####,####,###0.00");

    /**
     * 四舍五入
     *
     * @param value 数值
     * @param digit 保留小数位
     * @return
     */
    public static String getRoundUp(BigDecimal value, int digit) {
        return value.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 四舍五入
     *
     * @param value 数值
     * @param digit 保留小数位
     * @return
     */
    public static String getRoundUp(double value, int digit) {
        BigDecimal result = new BigDecimal(value);
        return result.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 四舍五入
     *
     * @param value 数值
     * @param digit 保留小数位
     * @return
     */
    public static String getRoundUp(String value, int digit) {
        BigDecimal result = new BigDecimal(Double.parseDouble(value));
        return result.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * 获取百分比（乘100）
     *
     * @param value 数值
     * @param digit 保留小数位
     * @return
     */
    public static String getPercentValue(BigDecimal value, int digit) {
        BigDecimal result = value.multiply(new BigDecimal(100));
        return getRoundUp(result, digit);
    }

    /**
     * 获取百分比（乘100）
     *
     * @param value 数值
     * @param digit 保留小数位
     * @return
     */
    public static String getPercentValue(double value, int digit) {
        BigDecimal result = new BigDecimal(value);
        return getPercentValue(result, digit);
    }

    /**
     * 获取百分比（乘100,保留两位小数）
     *
     * @param value 数值
     * @return
     */
    public static String getPercentValue(double value) {
        BigDecimal result = new BigDecimal(value);
        return getPercentValue(result, 2);
    }

    /**
     * 金额格式化
     *
     * @param value 数值
     * @return
     */
    public static String getMoneyValue(double value) {
        return amountFormat.format(value);
    }

    /**
     * 金额格式化
     *
     * @param value 数值
     * @return
     */
    public static String getMoneyValue(String value) {
        return amountFormat.format(Double.parseDouble(value));
    }

    /**
     * int -tostring
     *
     * @param value 数值
     * @return
     */
    public static String getIntegerValue(int value) {
        return Integer.valueOf(value).toString();
    }

    /**
     * onTextChanged
     *
     * @param sequence (CharSequenc s
     * @param editText
     */
    public static void formatDot(CharSequence sequence, EditText editText) {
        String s = sequence.toString();
        if (s.contains(".")) {
            /**
             * 如果小数点位数大于两位 截取后两位
             */
            if (s.length() - 1 - s.indexOf(".") > 2) {
                s = s.substring(0, (s.indexOf(".") + 3));
                editText.setText(s);
                editText.setSelection(s.length());
            }
        }
        /**
         * 如果第一个输入为小数点 ，自动补零
         */
        if (s.trim().substring(0).equals(".")) {
            s = "0" + s;
            editText.setText(s);
            editText.setSelection(s.length());
        }
        /**
         * 如果第一个第二个均为0
         */
        if (s.startsWith("0") && s.trim().length() > 1) {
            if (!s.substring(1, 2).equals(".")) {
                editText.setText(s.substring(0, 1));
                editText.setSelection(1);
                return;
            }
        }
    }

    //将px转换为dp
    public static int px2dp(Context context, int pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    //将像素转换为px
    public static int dip2px(Context context, int dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 格式化价格信息，精确到小数点后两位
     */
    public static String distanceFormat(double dis) {
        if (dis < 1000) {
            return (int) dis + "米";
        } else {
            DecimalFormat df = new DecimalFormat("#0.00");
            return df.format(dis / 1000.0) + "千米";
        }
    }

    /**
     * 获得某个日期是星期几
     *
     * @param date
     * @return
     */
    public static String getDateWeek(Date date) {
        Calendar c = Calendar.getInstance();

        c.setTime(date);

        String Week = "";
        if (c.get(Calendar.DAY_OF_WEEK) == 1) {
            Week = "日";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 2) {
            Week = "一";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 3) {
            Week = "二";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 4) {
            Week = "三";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 5) {
            Week = "四";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 6) {
            Week = "五";
        }
        if (c.get(Calendar.DAY_OF_WEEK) == 7) {
            Week = "六";
        }

        return Week;
    }

    /**
     * dp转px
     *
     * @param context 上下文
     * @param dpValue dp值
     * @return px值
     */
    public static int dp2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * px转dp
     *
     * @param context 上下文
     * @param pxValue px值
     * @return dp值
     */
    public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * sp转px
     *
     * @param context 上下文
     * @param spValue sp值
     * @return px值
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * px转sp
     *
     * @param context 上下文
     * @param pxValue px值
     * @return sp值
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    public static String getFileSize(String sizeStr) {
        if (sizeStr == null) {
            return "0";
        }
        double size = Double.valueOf(sizeStr);

        return getFileSize(size);
    }

    public static String getFileSize(double size) {
        //获取到的size为：1705230
        long TB = 1024 * 1024 * 1024 * 1024L;//定义TB的计算常量
        int GB = 1024 * 1024 * 1024;//定义GB的计算常量
        int MB = 1024 * 1024;//定义MB的计算常量
        int KB = 1024;//定义KB的计算常量

        DecimalFormat df = new DecimalFormat("0.0");//格式化小数
        String resultSize;

        if (size / TB >= 1) {
            //如果当前Byte的值大于等于1GB
            resultSize = df.format(size / (float) TB) + "TB";

        } else if (size / GB >= 1) {
            //如果当前Byte的值大于等于1GB
            resultSize = df.format(size / (float) GB) + "GB";
        } else if (size / MB >= 1) {
            //如果当前Byte的值大于等于1MB
            resultSize = df.format(size / (float) MB) + "MB";
        } else if (size / KB >= 1) {
            //如果当前Byte的值大于等于1KB
            resultSize = df.format(size / (float) KB) + "KB";
        } else {
            resultSize = size + "B";
        }
        return resultSize;
    }

    public static Bitmap getBitmapByByteArray(byte[] byteArr) {
        //将byte[]类型转换成Bitmap类型
        return BitmapFactory.decodeByteArray(byteArr, 0, byteArr.length);
    }

    public static byte[] getByteArrayByBitmap(Bitmap bitmap) {
        //Bitmap转换成byte[]
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] data = baos.toByteArray();
        return data;
    }

    /**
     * 根据指定的单位，对数字进行格式化：小于单位则直接返回，大于则格式化（15000, 10000,"万"）=》1.5万
     *
     * @param value
     * @param unitSize
     * @param unitStr
     * @return
     */
    public String getFormatNumUnit(long value, long unitSize, String unitStr) {
        if (value < unitSize) {
            return "" + value;
        } else {
            value = value / unitSize;
            return value + unitStr;
        }
    }
}
